/* common.c
 * Implementação das funções comuns aos programas
 */

#include <stdio.h>
#include <string.h>
#include <unistd.h>

#include "common.h"

void msg_ini(targs* tparams, FILE* log_file){

    switch(tparams->type){
        case GERENTE:
            fprintf(log_file, "Gerente  %d criado. Aguardando o recurso...\n", tparams->id);
            break;

        case PRODUTOR:
            fprintf(log_file, "Produtor %d criado. Aguardando recurso...\n", tparams->id);
            break;
    }
    fflush(log_file);
}
 
void acessa_area_compartilhada(targs* tparam, FILE *log_file, char *estoque, int *estoque_index){
    char print_help[50], temp[5];

    switch(tparam->type){
        case GERENTE:
            print_help[0] = '\0';

            fprintf(log_file, "Gerente  %d esta verificando o estoque:\n", tparam->id);
            fflush(log_file);
            sleep(tparam->sleept);
            int i;
            for(i=0; i<T_LIMIT; i++){
                sprintf(temp, "[%c]", estoque[i]);
                strcat(print_help, temp);
            }
            fprintf(log_file, "Gerente  %d leu o estoque: %s\n", tparam->id, print_help);
            break;

        case PRODUTOR:
            fprintf(log_file, "Produtor %d incrementando o estoque\n", tparam->id);
            sleep(tparam->sleept);
            estoque[*estoque_index] = 'X';
            *estoque_index += 1;
            fprintf(log_file, "Produtor %d terminou de incrementar o estoque\n", tparam->id);
            break;
    }
    fflush(log_file);
}

char* how_to_use(){
    char *how_to_use_string = 
        "Como usar: $<nome_do_prog> [--auto]\n\n";

    return how_to_use_string;
}

char* menu(){
    char *menu_string = "\nDigite: <p|g|exit> [<time>]\nOnde: p: cria um produtor\n      g: criar um gerente\n      exit: sai da aplicação\n      time: tempo que ele levará para executar, um valor aleátorio entre 0-10 é gerado por default\n            o valor informado deve ser maior que 0 e menor que 10\n\n";

    return menu_string;
}

